<?php

class UniForm extends Zend_Form
{
	/**
         * @var array
         * Default options
         */            
	private $default=array(	
							'czy_tabelka'				=> True,
							'czy_formularz'				=> False,
							'nazwa_formularza'			=> NULL,
							'liczba_kolumn'				=> 1,
							'czy_wierszami'				=>false,
							'czy_automat'				=> false,
							'maper_automat'				=> NULL,
							'typ_form_automat'			=> 'E',		//------ E - edycja, P - podgląd, D - dodawanie, I -inny
							'szablon'					=> NULL,
							'czy_grid'					=> false,
							'jezyk_kod'					=> 'pl',
							'kolumny'					=> array(),
							'obiekty'					=> array(),
							'tytuł'						=> NULL,
							'submit_akcja'				=> NULL,
							'anuluj_akcja'				=> NULL,
							'oddzielny_fieldset_akcje'	=> false,
							'liczba fieldsetów'			=> 1,
							'tytuly fieldsetow'			=> array(),
							'glowny fieldset'			=> true,
							//---------NIEJAWNE-------------//
							'id'						=> NULL,
							//---zmienne do zakladek forma-----//
							'czy_subform' => false,
							'ile_subformow' => 0,
							'nazwy_subformow' => array()
	
							
							);						

	public $licznik_data = 1;
	private $licznik_text = 1;
	/**
	 * prywatne pole do translacji
	 */	
	private $_trans;					
	/*
	 * 	Funkcja do ustawiania siadki formularza (dekoratora ogólnego). Domyslnie będzie to tabelka.
	 * 	W zależnosci od parametru albo będzie generowany automatycznie lub ręcznie
	 */
	public function __construct( $p_options = array())
	{
		$jazyk_manager = new JezykPoManager();
		$this->_trans = $jazyk_manager->getTranslator(array('locale' => Zend_Registry::get('Zend_Translate')));

/*		if($this->default['czy_subform']) //brak subformow
			for($i=1;$i<=$this->default['ile_subformow'];$i++)
				${'subform'.$i} = new Zend_Form_SubForm(); */
			
		$this->default=array_merge($this->default, $p_options);
		if ($this->default['czy_automat'])
			$this->autoForm($this->default['maper_automat']);
			
		if (!empty($this->default['obiekty'])&&!($this->default['czy_automat']))
		{
			foreach ($this->default['obiekty'] as $v => $s)
			{	
				$metoda = split('_',$v);
				$this->$metoda[0]($s);
			}			
		}
		
/*		if($this->default['czy_subform']) // brak subformow
        	for($i=1;$i<=$this->default['ile_subformow'];$i++)
				$this->addSubForm(${'subform'.$i}, $this->default['nazwy_subformow'][$i-1]);*/
		
	}						
	
	public function DodajParametry($p_options = array())
	{
		$this->default=array_merge($this->default, $p_options);
	}
	
	//--------------------------------------------ELEMENTY FORMULARZA-------------------------------------------------------//
	
	/*
	 * 	Definicja inputa.
	 */
	public function input($p_option = array())
	{
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,
		                                  'maper'			=> NULL,
									      'maper_where'		=> array(),
										  'maper_from'		=> array(),
									      'maper_order'		=> array(),
										  'maper_group'		=> array(),
										  'maper_id'			=> NULL,
		                                  'maper_label'     => NULL,
										  'jaki_null'		=> 'NULL',
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,
										  'pre_text'		=> NULL,
										  'post_text'		=> NULL,
										  'fieldset'		=> NULL,
		                                  'typ'             => NULL,
		
		                                  'grupa_dane' => NULL,
		                                  'min_dlugosc' =>0,	  
										  'max_dlugosc' =>999999,
										  'numer_subforma' => NULL,		
										  'wyrazenie_regularne' => NULL,
										  'nip'=>NULL,
										  'pesel'=>NULL,
										  'regon'=>NULL,	
										  'wiadomosci_validatorow' => array('NOT NULL'=> array('Element nie może być pusty'),
																			'STR LEN' => array('Podana wartość jest za krótka!','Podana wartość jest za długa!'),
																			'REG EXP' => array('Niepoprawny typ','Podana wartość nie pasuje do wzorca', 'Wystapil wewnetrzny blad wzorca')
																		   )  
		);
														
		$option=array_merge($option, $p_option);
	
		$input = new Zend_Form_Element_Text($option['kolumna']);
		
		//---------Definiowanie typu inputa (np. cczy jest chekboxem)----------//
		//---------------------------------------------------------------------//
		/*
		if ($option['typ'] == "checkbox")
		{
			if (isset($option['maper'])) {
	        	$input = new Zend_Form_Element_MultiCheckboxTable($option['kolumna'], null, 2);
		        $maper = new $option['maper'];

				if ($option['maper_jezyk']!=NULL) {
					//zmiana
					$result = $maper->selectAllL($option['maper_jezyk'],$this->default['jezyk_kod'],NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
				}
				else
				$result = $maper->selectAll(NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
				
				foreach ($result as $v)
				{
					if ($v[$option['maper_id']]!=NULL)
					    $input -> addMultiOption($v[$option['maper_id']], $v[$option['maper_label']]);
				}   	
		    } 
		    //reczne podawanie listy opcji
			if (is_array($option['grupa_dane'] && !$option['maper'])) 
			{
			    $input = new Zend_Form_Element_MultiCheckboxTable($option['kolumna'],null, 2);
			    $input->addMultiOptions($option['grupa_dane']);
			}
			//pobieranie z bazy danych
			if (is_array($option['grupa_dane']) && count($option['maper']) == 1)
			{
			   $input = new Zend_Form_Element_MultiCheckboxTable($option['kolumna']);
			   $input->setCheckedValue($option['warosc_zaznaczony']);
			   $input->setUncheckedValue($option['warosc_odznaczony']);
			}				
		}
		*/
		if ($option['typ'] == "password")
		{
			$input = new Zend_Form_Element_Password($option['kolumna']);			
		}
		//echo $option['kolumna'];
		//$input->setAttrib('name',$option['kolumna']);
		//---------------------------------------------------------------------//
		//---------------------------------------------------------------------//		
		
		//---------dodanie validatorów, filtrów-----------//
		$input->addFilter('StripTags')
			   ->addFilter('StringTrim');
			   
		if ($option['jaki_null']=='NOT NULL')
		{
			$input->setRequired(true)
				  ->addValidator( $this->walidator('NOT NULL',array(),$option['wiadomosci_validatorow']), true );	   
		}
		
		if ($option['min_dlugosc'] > 0)
			$input->addValidator( $this->walidator('STR LEN',array('min' => $option['min_dlugosc'], 'max' => $option['max_dlugosc']),$option['wiadomosci_validatorow']), true );
		
		if (!is_null($option['wyrazenie_regularne']) )
			$input->addValidator( $this->walidator('REG EXP',array('pattern' => $option['wyrazenie_regularne'] ),$option['wiadomosci_validatorow']), true );

		if (!is_null($option['pesel']) )
			$input->addValidator( $this->walidator('PESEL',array(), true ));
			
		if (!is_null($option['nip']) )
			$input->addValidator( $this->walidator('NIP',array(), true ));		

		if (!is_null($option['regon']) )
			$input->addValidator( $this->walidator('REGON',array(), true ));			
			
		//---------Definicja własciwosci-----------------//
		$input->setValue($option['wartosc']);

		if ($option['label']!=NULL&&$option['special']==NULL)
			$input->setLabel($this->_trans->translate($option['label']));

	    if ($option['tooltip']!=NULL)
	    	$input->setAttrib('title',$this->_trans->translate($option['tooltip']));		
		
	   	$input->setAttrib('style','width: '.$option['width'].'px;height: '.$option['height'].'px');	
		
	   	if ($option['special']!=NULL)
	   		$input->setAttrib('readonly','readonly');
		
	   	if ($option['pre_text']!=NULL)
	   		$input->setAttrib('pre_text',$this->_trans->translate($option['pre_text']));	

	   	if ($option['post_text']!=NULL)
	   		$input->setAttrib('post_text',$this->_trans->translate($option['post_text']));	

	   	if ($option['fieldset']!=NULL)	
			$input->setAttrib('fieldset',$option['fieldset']);	
	   		
	   	if ($option['numer_subforma']!=NULL)	
			$input->setAttrib('subform',$option['numer_subforma']);	
		else
			$input->setAttrib('subform',NULL);
			
		//------------FUNKCYJNE TYPY INPUTÓW-------------//	
	   	//--------Czy data-------------------------------//
	   	if ($option['data']&&$option['special']==NULL)
	   	{
		   	$input->setAttrib('dojoType','dijit.form.DateTextBox'); 
			$input->setAttrib('type','text');
			$input->setAttrib('id','date'.$this->licznik_data);
			$this->licznik_data++; 
	   	}
	   	
	   	//--------Czy timestamp--------------------------//
		if ($option['timestamp']&&$option['special']==NULL)
	   	{
		   	$input->setAttrib('dojoType','dijit.form.DateTextBox'); 
			$input->setAttrib('type','text');
			$input->setAttrib('id','date'.$this->licznik_data);
			$this->licznik_data++; 
	   	}
	   	
	    //--------Dodawanie klasy------------------------//	
	    if ($this->czy_grid)
	    	$input->setAttrib('class','DataGridInput'.$szablon);
	    else
	    {		
	    	if ($option['special']==NULL)
	    	{
	    		$input->setAttrib('class','FormInput'.$szablon);
	    	}
	    	else
	    	{
	    		$input->setAttrib('class','FormSpecial'.$szablon);		
	    	}
	    }
	    	
	    //@amazur brak subformow
	    //if($option['numer_subforma']==NULL)
			$this->addElements(array($input));
		//else
		//echo '1';
			//${'subform'.$option['numer_subforma']}->addElement($input);
	}

	/*
	 *  Definicja checkboxa
	 */
	public function checkbox($p_option = array())
	{
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,
		                                  'maper'			=> NULL,
									      'maper_where'		=> array(),
										  'maper_from'		=> array(),
									      'maper_order'		=> array(),
										  'maper_group'		=> array(),
										  'maper_id'		=> NULL,
		                                  'maper_label'     => NULL,
										  'jezyk_kod'		=>NULL,
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,
										  'pre_text'		=> NULL,
										  'post_text'		=> NULL,
										  'fieldset'		=> NULL,
										  'numer_subforma' 	=> NULL,
		
		                                  'warosc_zaznaczony' => 1, //wartosci dla checkbox
		                                  'wartosc_odznaczony'=> 0, //wartosci dla checkbox
										  'czy_zaznaczony' => false, //domyslne zaznaczenie
										  'czy_wymagany' => false,
										  'on_change'		  => NULL,
										  'wiadomosci_validatorow' => array('GREATHER THAN'=> array('Zaznaczenie elementu jest wymagane!'))
		);
														
		$option=array_merge($option, $p_option);

		$checkbox = new Zend_Form_Element_Checkbox($option['kolumna']);
		 
    	if ($option['maper'] != NULL) //z bazy
		{
        	$maper = new $option['maper'];
			if ($option['maper_jezyk']!= NULL) 
			{
				$result = $maper->selectAllL($option['maper_jezyk'],$this->default['jezyk_kod'],NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
			}
			else
				$result = $maper->selectAll(NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
		
			//foreach ($result as $v)
			//{
				$checkbox->setCheckedValue($result[0][$option['maper_id']]);
				$checkbox->setUnCheckedValue($result[1][$option['maper_id']]);
        		
				
				//if ($v[$option['maper_id']]!=NULL)
				//    $checkbox;// -> addMultiOption($v[$option['maper_id']], $v[$option['maper_label']]);
			//}   	
    	}
    	else //recznie z listy opcji
    	{
			$checkbox->setCheckedValue($option['warosc_zaznaczony'])
        		 ->setUncheckedValue($option['warosc_odznaczony']);
    	}     		 
        		 

        if($option['czy_zaznaczony'])
        	$checkbox->setAttrib('checked','checked');	
        	
        //---------dodanie validatorów, filtrów-----------//	
		if ($option['czy_wymagany'])
		{
			$input->setRequired(true)//	ustalamy ze jesli jest wymagane zaznaczernie to nie def. innych wart niz zero/jeden
				  ->addValidator( $this->walidator('GREATHER THAN',array('min' => 0 ),$option['wiadomosci_validatorow']), true );	   
		}		 
        		  
		//---------Definicja własciwosci-----------------//

		if ($option['label']!=NULL)
	    	$checkbox->setLabel($this->_trans->translate($option['label']));
	    if ($option['tooltip']!=NULL)
	    	$checkbox->setAttrib('title',$this->_trans->translate($option['tooltip']));		
		
	   	$checkbox->setAttrib('style','width: '.$option['width'].'px;height: '.$option['height'].'px');	
		
	   	if ($option['pre_text']!=NULL)
	   		$checkbox->setAttrib('pre_text',$this->_trans->translate($option['pre_text']));	

	   	if ($option['post_text']!=NULL)
	   		$checkbox->setAttrib('post_text',$this->_trans->translate($option['post_text']));	

	   	if ($option['fieldset']!=NULL)	
			$checkbox->setAttrib('fieldset',$option['fieldset']);			

		if ($option['numer_subforma']!=NULL)	
			$checkbox->setAttrib('subform',$option['numer_subforma']);	
		else
			$checkbox->setAttrib('subform',NULL);			
			
		//--------Dodawanie klasy------------------------//	
		//@TODO dopisac klasy dla checkbox'a w css
	    /*if ($this->czy_grid)
	    	$checkbox->setAttrib('class','DataGridCheckbox'.$szablon);
	    else
	    {		
	    	$checkbox->setAttrib('class','FormCheckbox'.$szablon);		
	    }*/	
		$this->addElements(array($checkbox));
	}
	
	/*
	 *  Definicja grupy radiobuttonów
	 */
	
	public function radiobuttongroup($p_option = array())
	{
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,
		                                  'maper'			=> NULL,
									      'maper_where'		=> array(),
										  'maper_from'		=> array(),
									      'maper_order'		=> array(),
										  'maper_group'		=> array(),
										  'maper_id'		=> NULL,
		                                  'maper_label'     => NULL,
										  'maper_jezyk'		=> NULL,
										  'jaki_null'		=> 'NULL',
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,
										  'pre_text'		=> NULL,
										  'post_text'		=> NULL,
										  'fieldset'		=> NULL,
										  'liczba_kolumn'	=> 1,
										  'czy_wierszami'	=> false,
										  'numer_subforma'  => NULL,

		                                  'radiobutton_opcje'=> array(
																1=>'a',2=>'s','d'=>'d','f'=>'f','k'=>'k','o'=>'o','p'=>'p','l'=>'l','m'=>'m',),
										  'on_change'		  => NULL
		);
														
		$option=array_merge($option, $p_option);

		$radiobutton = new Zend_Form_Element_Radio($option['kolumna']);
		
		if ($option['maper'] != NULL) //z bazy
		{
        	$maper = new $option['maper'];
			if ($option['maper_jezyk']!= NULL) 
			{
				$result = $maper->selectAllL($option['maper_jezyk'],$this->default['jezyk_kod'],NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
			}
			else
				$result = $maper->selectAll(NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
		
			foreach ($result as $v)
			{
				if ($v[$option['maper_id']]!=NULL)
				    $radiobutton->addMultiOption($v[$option['maper_id']], $v[$option['maper_label']]);
			}   	
    	}
    	/*
    	else //recznie z listy opcji @FIXME nie dziala reczne wczytywanie opcji
    	{
    		foreach($option['radiobutton_opcje'] as $key => $value)
    		{
    			$radiobutton->addMultiOption($key, $value);
    		}
    		
    	} 
		*/
    	else
    	{
    		$radiobutton->addMultiOptions($option['radiobutton_opcje']);	
    	}
    	 
		//---------Definicja własciwosci-----------------//
		$radiobutton->setValue($option['wartosc']);

		if ($option['label']!=NULL)
	    	$radiobutton->setLabel($this->_trans->translate($option['label']));
	    if ($option['tooltip']!=NULL)
	    	$radiobutton->setAttrib('title',$this->_trans->translate($option['tooltip']));		
		
	   	$radiobutton->setAttrib('style','width: '.$option['width'].'px;height: '.$option['height'].'px');	
		
	   	if ($option['pre_text']!=NULL)
	   		$radiobutton->setAttrib('pre_text',$this->_trans->translate($option['pre_text']));	

	   	if ($option['post_text']!=NULL)
	   		$radiobutton->setAttrib('post_text',$this->_trans->translate($option['post_text']));	

	   	if ($option['fieldset']!=NULL)	
			$radiobutton->setAttrib('fieldset',$option['fieldset']);			

		if ($option['numer_subforma']!=NULL)	
			$radiobutton->setAttrib('subform',$option['numer_subforma']);	
		else
			$radiobutton->setAttrib('subform',NULL);		
			
		//--------Dodawanie klasy------------------------//	
		//@TODO dopisac klasy dla radiobutton'a w css
/*	    if ($this->czy_grid)
	    	$radiobutton->setAttrib('class','DataGridRadiobutton'.$szablon);
	    else
	    {		
	    	$radiobutton->setAttrib('class','FormRadiobutton'.$szablon);
	    }*/	
		$this->addElements(array($radiobutton));		
	}
	
	/*
	 *  Definicja checkboxtable
	 */
	public function checkboxtable($p_option = array())
	{
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,
		                                  'maper'			=> NULL,
									      'maper_where'		=> array(),
										  'maper_from'		=> array(),
									      'maper_order'		=> array(),
										  'maper_group'		=> array(),
										  'maper_id'		=> NULL,
		                                  'maper_label'     => NULL,
										  'maper_jezyk'		=>NULL,
										  'jaki_null'		=> 'NULL',
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,
										  'pre_text'		=> NULL,
										  'post_text'		=> NULL,
										  'fieldset'		=> NULL,
		
										  'numer_subforma' 	=> NULL,
		
										  'liczba_kolumn'	=> 3,
										  'czy_wierszami'	=>false,		
		
										  'radiobutton_opcje'=> array(1=>'a',2=>'s','d'=>'d','f'=>'f','k'=>'k',
										  							'o'=>'o','p'=>'p','l'=>'l','m'=>'m',
																	),
		                                  'warosc_zaznaczony' => 1, //wartosci dla checkbox
		                                  'wartosc_odznaczony'=> 0, //wartosci dla checkbox
										  'on_change'		  => NULL
		);
														
		$option=array_merge($option, $p_option);
		
		$checkboxtable = new Zend_Form_Element_MultiCheckbox($option['kolumna']);
		
		if ($option['maper'] != NULL) //z bazy
		{
        	$maper = new $option['maper'];
			if ($option['maper_jezyk']!= NULL) 
			{
				$result = $maper->selectAllL($option['maper_jezyk'],$this->default['jezyk_kod'],NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
			}
			else
				$result = $maper->selectAll(NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
		
			foreach ($result as $v)
			{
				if ($v[$option['maper_id']]!=NULL)
				    $checkboxtable->addMultiOption($v[$option['maper_id']], $v[$option['maper_label']]);
			}   	
    	}
    	/*else //recznie z listy opcji 
    	{
    		foreach($option['radiobutton_opcje'] as $key => $value)
    		{
    			$checkboxtable->addMultiOption($key, $value);
    		}
    		
    	}*/ 
    	else //recznie z listy opcji 
    	{
    			$checkboxtable->addMultiOptions($option['radiobutton_opcje']);	
    	} 		
		
		if ($option['numer_subforma']!=NULL)	
			$checkboxtable->setAttrib('subform',$option['numer_subforma']);	
		else
			$checkboxtable->setAttrib('subform',NULL);
		//--------Dodawanie klasy------------------------//	
		//@TODO dopisac klasy dla grupu check'ow w css
/*	    if ($this->czy_grid)
	    	$checkboxtable->setAttrib('class','DataGridCheckboxtable'.$szablon);
	    else
	    {		
	    	$checkboxtable->setAttrib('class','FormCheckboxtable'.$szablon);
	    }	*/		
		
		$this->addElements(array($checkboxtable));;
	}
	
	/*
	 * 	Definicja textarea.
	 */
	public function textarea($p_option = array())
	{
		
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'kolumny'			=> 70,
										  'wiersze'			=> 8,
										  'czy_fckedytor'	=> false,
										  'ToolbarSet'		=> NULL,
										  'width'			=> 600,
										  'height'			=> 300,
										  'fieldset'		=> NULL,
										  'numer_subforma' 	=> NULL,
											);
																			
		$option=array_merge($option, $p_option);
		
		if ($option['czy_fckedytor'])
			$textarea = new Zend_Form_Element_FormRTE($option['kolumna']);
		else
			$textarea = new Zend_Form_Element_Textarea($option['kolumna']);
		
		//---------validatory----------------------------//	
		$textarea->addFilter('StripTags')
			   ->addFilter('StringTrim');
			
		//---------Definicja własciwosci-----------------//
		$textarea->setValue($option['wartosc']);

		if ($option['label']!=NULL)
	    	$textarea->setLabel($this->_trans->translate($option['label']));
	    if ($option['tooltip']!=NULL)
	    	$textarea->setAttrib('title',$this->_trans->translate($option['tooltip']));		
		
	    if ($option['czy_fckedytor'])
	    {
	    	$textarea->setAttrib('ToolbarSet',$option['ToolbarSet']);
	    	$textarea->setAttrib('Height',$option['height'])
					 ->setAttrib('Width',$option['width']);
	    }
	    else
	    {	
	    	$textarea->setAttrib('rows',$option['wiersze']);
	    	$textarea->setAttrib('cols',$option['kolumny']);	
	    }	

	    if ($option['fieldset']!=NULL)	
			$textarea->setAttrib('fieldset',$option['fieldset']);
	    
		if ($option['numer_subforma']!=NULL)	
			$textarea->setAttrib('subform',$option['numer_subforma']);	
		else
			$textarea->setAttrib('subform',NULL);	
			
	    //--------Dodawanie klasy------------------------//	
	    if ($this->czy_grid)
	    	$textarea->setAttrib('class','DataGridTextarea'.$szablon);
	    else		
	    	$textarea->setAttrib('class','FormTextarea'.$szablon);		
	    	
		$this->addElements(array($textarea));

	}	
	
	/*
	 * 	Definicja selecta.
	 */
	public function select($p_option = array())
	{
		$szablon = $this->default['szablon'];
		
		$option = array(
										  	'poz-x'				=> NULL,			//--wiem
										  	'poz-y'				=> NULL,			//--wiem
										  	'kolumna' 			=> NULL,			
										  	'wartosc' 			=> NULL,
										  	'label'				=> NULL,
										  	'tooltip' 			=> NULL,
											'option_default'	=> $this->_trans->translate('--Wybierz--'),
										  	'maper'				=> NULL,
											'maper_where'		=> array(),
											'maper_from'		=> array(),
											'maper_order'		=> array(),
											'maper_group'		=> array(),
											'maper_id'			=> NULL,			//--?
											'maper_label'		=> NULL,			//--?
											'width'				=> 150,				//--wiem
										  	'height'			=> 26,				//--wiem
											'maper_jezyk'		=> NULL,
											'fieldset'			=> NULL,
											'numer_subforma' 	=> NULL,
		
											'czy_post'          => false,
		                                    'dane_powiazanego_selecta' => array(),
		                                    'zalezny'  => array()
											  );
											  
		$option=array_merge($option, $p_option);
		
		$select = new Zend_Form_Element_Select($option['kolumna']);
		
		//---------Definicja własciwosci-----------------//
		if ($option['label']!=NULL)
	    	$select->setLabel($this->_trans->translate($option['label']));
	    	
		if ($option['tooltip']!=NULL)
			$select->setAttrib('title',$this->_trans->translate($option['tooltip']));
		else		
			$select->setAttrib('title',$this->_trans->translate($option['label']));
		
		if ($option['fieldset']!=NULL)	
			$select->setAttrib('fieldset',$option['fieldset']);	
		
		//----------validatory---------------------------//
	
		//---------Dodawanie opcji selecta---------------//	
		$select	->addMultiOption('',$option['option_default']);
		$maper = new $option['maper'];
		if ($option['maper_jezyk']!=NULL){
			$result = $maper->selectAllL($this->default['jezyk_kod'],NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
		}
		else
			$result = $maper->selectAll(NULL,NULL,$option['maper_where'],$option['maper_from'],$option['maper_order'],$option['maper_group']);
			
		foreach ($result as $v)
		{
			if ($v[$option['maper_id']]!=NULL)
				$select -> addMultiOption($v[$option['maper_id']], $v[$option['maper_label']]);
		}
		
		if ($option['wartosc'])		
		$select	->setValue($option['wartosc']);
		
		if ($this->czy_grid)
	    	$select->setAttrib('class','DataGridSelect'.$szablon);
	    else		
	    	$select->setAttrib('class','FormSelect'.$szablon);	    	
	    	
		$select->setAttrib('style','width: '.$option['width'].'px; height: '.$option['height'].'px;');		

	   	if ($option['numer_subforma']!=NULL)	
			$select->setAttrib('subform',$option['numer_subforma']);	
		else
			$select->setAttrib('subform',NULL);		
		
		$this->addElements(array($select));
	        // Kod opowiadający za uzupełnianie wartości pól powiązanych
         /*
         'zalezny' => array(
                   'nazwa_mapera'     => 'zamCennikTransportu',
                   'id_komponentu'    =>  zamZamowienia::ZAM_cennik_transportu_id_fk,
                   'pole_wyswietlane' =>  zamCennikTransportu::CENNIK_TR_cena
                   'fk_tabli_nadrzednej' => zamCennikTransportu::CENNIK_TR_rodzaje_dostaw_id_fk,
                  )
         */             
		if ($option['czy_post']) {
			//nazwa mapera dla komponentu zaleznego
			$select->setAttrib('UniFormZalezny' , $option['zalezny']['nazwa_mapera']);
			//id html-owe komponentu powiazanego
			$select->setAttrib('UniFormZaleznyId' , $option['zalezny']['id_komponentu']);
			//nazwa pola którego wartośc będzie się pojawiać w selekcie
			$select->setAttrib('UniFormPoleWyswielane', $option['zalezny']['pole_wyswietlane']);
			//nazwa kolumny klucza obcego w tabeli nadrzendej  w tabli podrzednej
			$select->setAttrib('UniFormNadrzednaFk', $option['zalezny']['fk_tabli_nadrzednej']);
			$select->setAttrib('onchange', 'zalezne.przygotujDane(this.id)');
			$this->addElements(array($select));
		}		
	}
	
	/**
	 * Tworzy komponent wyśietlający tekst bez możliwości jego edycji
	 * @param array $p_option - opcje komponentu
	 */
	public function text($p_option = array()) 
	{
	    $szablon = $this->default['szablon'];

		$option = array(
										  	'poz-x'				=> NULL,			//--wiem
										  	'poz-y'				=> NULL,			//--wiem
										  	'kolumna' 			=> NULL,			
										  	'wartosc' 			=> NULL,
										  	'label'				=> NULL,
										  	'tooltip' 			=> NULL,
											'option_default'	=> $this->_trans->translate('--Wybierz--'),
										  	'maper'				=> NULL,
											'maper_where'		=> array(),
											'maper_from'		=> array(),
											'maper_order'		=> array(),
											'maper_group'		=> array(),
											'maper_id'			=> NULL,			//--?
											'maper_label'		=> NULL,			//--?
											'width'				=> 150,				//--wiem
										  	'height'			=> 26,				//--wiem
											'maper_jezyk'		=> NULL,
											'fieldset'			=> NULL,
		                                    //'czy_post'          => false,
		                                    'numer_subforma' 	=> NULL, 
		
		                                    'dane_powiazanego_selecta' => array(),
											'text'				=> 'Przykładowy tekst',
		);                                  
			
		$option=array_merge($option, $p_option);
	    $text= new Zend_Form_Element_Text('text'.$this->licznik_text);//new Zend_Form_Element_Board('tablica', array("style" => "margin-left:50px;" ), "label");
	    
	    $text->setValue($option['text']);//->setValue($option['text']);
	    $text->setAttrib('readonly','readonly');
	    
	    $text->setAttrib('style','width: '.$option['width'].'px;height: '.$option['height'].'px');
	    
	    if ($this->czy_grid)
	    	$text->setAttrib('class','DataGridText'.$szablon);
	    else		
	    	$text->setAttrib('class','FormText'.$szablon);

	   	if ($option['numer_subforma']!=NULL)	
			$text->setAttrib('subform',$option['numer_subforma']);	
		else
			$text->setAttrib('subform',NULL);	    	
	    	
	    $this->licznik_text++;
	    $this->addElement($text);	
	}
	
	/*
	 * 	Definicja file.
	 */
	public function file($p_option = array())
	{
		
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,
		                                  'maper'			=> NULL,
									      'maper_where'		=> array(),
										  'maper_from'		=> array(),
									      'maper_order'		=> array(),
										  'maper_group'		=> array(),
										  'maper_id'			=> NULL,
		                                  'maper_label'     => NULL,
										  'jaki_null'		=> 'NULL',
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,
										  'pre_text'		=> NULL,
										  'post_text'		=> NULL,
										  'fieldset'		=> NULL,
		                                  'typ'             => NULL,
		
		         						  'plik_zawartosc' 	=> NULL,
         								  'plik_mime'	 	=> NULL,   
								          'plik_nazwa'		=> NULL,
								          'plik_typ'		=> NULL,//rozszezenie pliku
										
		                                  'grupa_dane' => NULL,
										  'numer_subforma' => NULL,
										  'wyrazenie_regularne' => NULL,	
										  'wiadomosci_validatorow' => array()  
		);
		
		$option=array_merge($option, $p_option);
		
		$file = new Zend_Form_Element_File($option['kolumna']);

		//---------dodanie validatorów, filtrów-----------//

		//---------Definicja własciwosci-----------------//

		if ($option['label']!=NULL)
	    	$file->setLabel($this->_trans->translate($option['label']));
	    if ($option['tooltip']!=NULL)
	    	$file->setAttrib('title',$this->_trans->translate($option['tooltip']));		
		
	   	$file->setAttrib('style','width: '.$option['width'].'px;height: '.$option['height'].'px');	
		
	   	if ($option['pre_text']!=NULL)
	   		$file->setAttrib('pre_text',$this->_trans->translate($option['pre_text']));	

	   	if ($option['post_text']!=NULL)
	   		$file->setAttrib('post_text',$this->_trans->translate($option['post_text']));	

	   	if ($option['fieldset']!=NULL)	
			$file->setAttrib('fieldset',$option['fieldset']);	
	   
	   	if ($option['numer_subforma']!=NULL)	
			$file->setAttrib('subform',$option['numer_subforma']);	
		else
			$file->setAttrib('subform',NULL);
				   	
	    //--------Dodawanie klasy------------------------//	
	    //@TODO brak definicji w css dla elementu file
/*	    if ($this->czy_grid)
	    	$file->setAttrib('class','DataGridFile'.$szablon);
	    else
	    {		
	    	$file->setAttrib('class','FormFile'.$szablon);
	    }*/	

			$this->addElements(array($file));
	}
	
	//--------------------------KONIEC ELEMENTÓW-----------------------------------------------------------------------------//
	
	//--------------------------USTAWIANIE FORMULARZA------------------------------------------------------------------------//
	/*
	 * 	Metoda do ustawiania całego formularza ze zdefiniowanych elementów
	 * 	Dostawia również odpowiednie przyciski akcji	
	 * 
	 */
	public function ustaw_formularz()
	{	 
		$szablon = $this->default['szablon'];

		$out_echo = '';
		$form = $this->getElements();
		
		$akcje = array();
		
		$out_echo .= 'echo $this->dojo()->enable();';
		
		/*//@amazur do subform - zakladki narazie ich brak
		if($this->default['czy_subform'])
		{$out_echo .='echo \'<div id="tabs-"><ul>\';';
			foreach ($this->default['nazwy_subformow'] as $nazwa){
				$out_echo .='echo \'<li><a href="#fieldset-'.$nazwa.'">'.$nazwa.'</a></li>\';';
			}$out_echo .='echo \'</li>\';';}*/

		$out_echo .= 'echo \'<form class="Form'.$szablon.'" name="'.$this->default['nazwa_formularza'].'" method="POST" action="\';';
		if (isset($this->default['id']))
			$array_param = 'id =>' . $this->default['id'];
		else
			$array_param = '';
	
		//$out_echo .= 'echo $this->url(array('.$array_param.'),'.$this->default['submit_akcja'].');';	
		$out_echo .= 'echo $this->url(array('.$array_param.'),\''.$this->default['submit_akcja'].'\');';
		$out_echo .= 'echo \'">\';';
		
		if ($this->default['glowny fieldset'])
		{
			$out_echo .= 'echo \'<fieldset class="FormFieldSet'.$szablon.'" >\';';
			$out_echo .= 'echo \'<legend class="FormFieldLegend'.$szablon.'">'.$this->_trans->translate($this->default['tytuł']).'</legend>\';';
		}
		$out_echo .= 'echo \'<div class="FormContent'.$szablon.'">\';';
		
		$fieldset = 1;
		//moje zmienne @amazur
		$aktualny_numer_zakladki = 0;
		$v_atrybut_subform = NULL; // zamiast $v->getAttrib('subform');
		$czy_divy_zamkniete = true;
		$kolumnowe_echo ='';
		
		foreach ($form as $v) 
		{			
			//--Wyswietlanie errorów z validacji-------//
			$wiadomosci = "<br /><br />";
			if ($v->hasErrors()) {
				foreach ($v->getValidators() as $val) {
					$msg = $val->getMessageTemplates();
					
					foreach ($v->getErrors() as $error) {
						if (array_key_exists($error,$msg)) {
							$wiadomosci .= $msg[$error] . '<br />';
						}
					}
				}	
			} 
			          
            //Wyswielanie komponentów kolumnowych
			
			//if ($v instanceof Zend_Form_Element_MultiCheckbox /*Table*/||$v instanceof Zend_Form_Element_Radio
			    /*$v instanceof Zend_Form_Element_RadioTable ||*/// ) {
				//$uklad = new UkladKomponentow();
				
				//--Czemu parametry są na sztywno?----------//
				//$uklad_echo = $uklad->uluzKomonenty($v, $this->default['liczba_kolumn'],$this->default['czy_wierszami']);
			  //  $out_echo .= 'echo \''.$uklad_echo.'\';';
			   
			//}
			
			//Wyswielanie komponentów kolumnowych - działa!! @amazur
			if ($v instanceof Zend_Form_Element_MultiCheckbox ||$v instanceof Zend_Form_Element_Radio){
				$uklad = new UkladKomponentow();//--Czemu parametry s─ů na sztywno? juz nie sa :P --//
				$uklad_echo = $uklad->uluzKomonenty($v, $this->default['liczba_kolumn'],$this->default['czy_wierszami']);
			    $kolumnowe_echo = 'echo \''.$uklad_echo.'\';';}

			//zeby nie pobierac w nieskonczonosc tego samego paramu @amazur    
			$v_atrybut_subform = $v->getAttrib('subform');    			    

			/*
			if ($v->getAttrib('fieldset')!=NULL)
			{
				if ($fieldset==$v->getAttrib('fieldset'))
				{
					if ($fieldset>1)
					{
						$out_echo .= 'echo \'</table>\';';
						$out_echo .= 'echo \'</fieldset>\';';
					}
					$out_echo .= 'echo \'<fieldset class="FormFieldSetP'.$szablon.'">\';';
					if ($this->default['tytuly fieldsetow'])
					{
						$label_tab = $this->default['tytuly fieldsetow'];
						$out_echo .= 'echo \'<legend class="FormFieldLegendP'.$szablon.'">'.$this->_trans->translate($label_tab[$fieldset-1]).'</legend>\';';
					}	
					$out_echo .= 'echo \'<table class="FormTable'.$szablon.'">\';';	
					$fieldset++;
				}
			}
			else
				$out_echo .= 'echo \'<table class="FormTable'.$szablon.'">\';';	
			
			$out_echo .= 'echo \'<tr class="FormWiersz'.$szablon.'">\';';
			$out_echo .= 'echo \'<td class="FormPole'.$szablon.'">\';';
			*/
			
			if(strpos((string)$v,'submit')==false&&strpos((string)$v,'button')==false
				&&strpos((string)$v,'insd')==false&&strpos((string)$v,'indp')==false&&strpos((string)$v,'modd')==false&&strpos((string)$v,'modp')==false
				&&strpos((string)$v,'<a')==false)
				/*{
						
					$out_echo.= 'echo \'<div class="FormLabel'.$szablon.'">'.$v->getLabel().'</div>\';';
						
					$out_echo .= 'echo \'<div class="FormObiekt'.$szablon.'">\';';
					if ($v->getAttrib('pre_text'))
						$out_echo.= 'echo \'<div class="FormPreText'.$szablon.'">'.$v->getAttrib('pre_text').'</div>\';';
					//@amazur	
					if($v->getType()=='Zend_Form_Element_File')					
						$out_echo .= 'echo \''.$v->renderFile().$wiadomosci.'\';';
					else
						$out_echo .= 'echo \''.$v->renderViewHelper().$wiadomosci.'\';';
					
					if ($v->getAttrib('post_text'))
						$out_echo.= 'echo \'<div class="FormPostText'.$szablon.'">'.$v->getAttrib('post_text').'</div>\';';
					
					$out_echo .= 'echo \'</div></td>\';';
				}
			else if (strpos((string)$v,'submit')==true)
			{
				$out_echo .= 'echo \''.$v->renderViewHelper().$wiadomosci.'\';';
			}
			*/
			{ 		//@amazur obsluga zakladek
						//@TODO wypelnic klasy css dla 	TabContainer oraz ContentPane!!!
						if (($v_atrybut_subform!=NULL)&&($aktualny_numer_zakladki==0))//1pierwszy element z atrybutem numer_subforma
						{//zmien nr aktualny zacznij 2 divy i wsadz element
							$aktualny_numer_zakladki = $v_atrybut_subform;
							$out_echo .= 'echo \'<div dojoType="dijit.layout.TabContainer"  class="TabKontener'.$szablon.'" doLayout="false"  >\';';
					        $out_echo .= 'echo \'<div dojoType="dijit.layout.ContentPane" id="ContentPane'.$aktualny_numer_zakladki.'" class="KontentPane'.$szablon.'" title="'.$this->default['nazwy_subformow'][$aktualny_numer_zakladki-1].'" >\';';
			        		$czy_divy_zamkniete = false;
						}
						
						//else if (($v->getAttrib('subform')!=NULL)&&($aktualny_numer_zakladki!=0)&&($v->getAttrib('subform')==$aktualny_numer_zakladki))
						//{//2kolejny element w danej zakladce}
						
						else if (($v_atrybut_subform!=NULL)&&($aktualny_numer_zakladki!=0)&&($v_atrybut_subform!=$aktualny_numer_zakladki))
						{//3kolejny element w nowej zakladce zakladce ---zamknij stara zakladke, znien numer zakladki , nazwij nowa zakladke wsadz element
							$out_echo .= 'echo \'</div>\';';
							$aktualny_numer_zakladki = $v_atrybut_subform;
							$out_echo .= 'echo \'<div dojoType="dijit.layout.ContentPane" id="ContentPane'.$aktualny_numer_zakladki.'" class="KontentPane'.$szablon.'" title="'.$this->default['nazwy_subformow'][$aktualny_numer_zakladki-1].'" >\';';
							$czy_divy_zamkniete = false;
						}
						
						else if(($aktualny_numer_zakladki!=0)&&($v_atrybut_subform==NULL))
						{//4przychodzi element bez atr subform....zamknij zakladke i kontener i wsadz element i numer na zero
							$out_echo .= 'echo \'</div></div>\';';
							$czy_divy_zamkniete = true;
							$aktualny_numer_zakladki = 0;
						}
						
						//else if (($v->getAttrib('subform')==NULL)&&($aktualny_numer_zakladki==0))
						//{//5zwykly element bez niczego - wsadz element}
						
						
					if (!$v->getAttrib('czy_link'))		//@amazur do linka w formie warunek zeby 2 labeli nie bylo w przycisko - linku!!
						$out_echo.= 'echo \'<div class="FormLabel'.$szablon.'">'.$v->getLabel().'</div>\';';
						
					$out_echo .= 'echo \'<div class="FormObiekt'.$szablon.'">\';';
					if ($v->getAttrib('pre_text'))
						$out_echo.= 'echo \'<div class="FormPreText'.$szablon.'">'.$v->getAttrib('pre_text').'</div>\';';
					if($v instanceof Zend_Form_Element_File)//sprawdz czy file	bo ma inny render co widac ponizej			
						$out_echo .= 'echo \''.$v->renderFile().$wiadomosci.'\';';
					elseif($v instanceof Zend_Form_Element_MultiCheckbox ||$v instanceof Zend_Form_Element_Radio)//spr czy kolumnowy 
						$out_echo .= $kolumnowe_echo;
					elseif (($v->getAttrib('czy_link')==true))	//sprawdza czy to jest buttono-link
						$out_echo .= $this->renderuj_link($v);//metoda ponizej
					else
						$out_echo .= 'echo \''.$v->renderViewHelper().$wiadomosci.'\';';
					
					if ($v->getAttrib('post_text'))
						$out_echo.= 'echo \'<div class="FormPostText'.$szablon.'">'.$v->getAttrib('post_text').'</div>\';';
					
					$out_echo .= 'echo \'</div>\';';//zamknij div form obiekt @amazur: wywalilem zamkniecie :'echo \'</div></td>\';'					
			}				
			else
			{	
				$akcje[] = $v;
			}
			//$out_echo .= 'echo \'</tr>\';';
			//$out_echo .= 'echo \'</fieldset>\';';
		}
		//$out_echo .= 'echo \'</div>\';';		
		/*
		if ($v->getAttrib('fieldset')!=NULL)
		{
			$out_echo .= 'echo \'</table>\';';		
			$out_echo .= 'echo \'</fieldset>\';';						
		}
		else
			$out_echo .= 'echo \'</table>\';';
		
		$out_echo .= 'echo \'</div>\';';
		
		//$out_echo .= 'echo \'</fieldset>\';';
		
		if ($this->default['oddzielny_fieldset_akcje'])
		{
			$out_echo .= 'echo \'<div clas="FormFooter'.$szablon.'">\';';
			
			foreach ($akcje as $v)
			{
				if (strpos((string)$v,'insd'))
					$out_echo.= 'echo \'<div class="FormInsd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'insp'))
					$out_echo.= 'echo \'<div class="FormInsp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modd'))
					$out_echo.= 'echo \'<div class="FormModd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modp'))
					$out_echo.= 'echo \'<div class="FormModp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';	
			}
			
			$out_echo .= 'echo \'</div>\';';
			//$out_echo .= 'echo \'</fieldset>\';';
			$out_echo .= 'echo \'<fieldset class="FormFieldsetAkcji'.$szablon.'">\';';
			$out_echo .= 'echo \'<legend class="FormFieldAkcjiLegend'.$szablon.'">'.$this->_trans->translate('Akcje').'</legend>\';';
		
			$out_echo .= 'echo \'<div class="FormAkcje'.$szablon.'">\';';
	
		}
		else
		{
			$out_echo .= 'echo \'<hr class="FormHr'.$szablon.'">\';';
			$out_echo .= 'echo \'<div class="FormAkcje'.$szablon.'">\';';
	
			foreach ($akcje as $v)
			{
				if (strpos((string)$v,'insd'))
					$out_echo.= 'echo \'<div class="FormInsd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'insp'))
					$out_echo.= 'echo \'<div class="FormInsp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modd'))
					$out_echo.= 'echo \'<div class="FormModd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modp'))
					$out_echo.= 'echo \'<div class="FormModp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';	
			}

			$out_echo .= 'echo \'</fieldset>\';';
		}
		//@TODO wywal anuluj jesli inny typ formularza;
		if ($this->default['typ_form']!='I')
		{
			$out_echo .= 'echo $this->form->anuluj_link(\''.$this->_trans->translate('Anuluj').'\');';	
			$out_echo .= 'echo $this->form->submit_link(\''.$this->_trans->translate('Zapisz').'\');';
		}
		
		if ($this->default['oddzielny_fieldset_akcje'])
			$out_echo .= 'echo \'</fieldset>\';';
		
		$out_echo .= 'echo \'</div></td>\';';
		
		//if (!($this->default['oddzielny_fieldset_akcje']))
		//	$out_echo .= 'echo \'</fieldset>\';';
		
		if ($this->default['glowny fieldset'])
			$out_echo .= 'echo \'</fieldset>\';';
		
		$out_echo .= 'echo \'</form>\';';
		
		//@amazur do subforma - zakladki
		if($this->default['czy_subform'])
			$out_echo .='echo \'</div><script type="text/javascript">$("#tabs-").tabs();</script>\';';
		
		return $out_echo;
		*/
		if(!$czy_divy_zamkniete)// @amazur (bez tego divy sie sypia)do zakladek zamknij zakladke i kontener
		{
			$out_echo .= 'echo \'</div></div>\';';
			$czy_divy_zamkniete= true;
		}

		$out_echo .= 'echo \'</div>\';';//zamknij form kontent
		if ($this->default['oddzielny_fieldset_akcje'])
		{
			$out_echo .= 'echo \'<div clas="FormFooter'.$szablon.'">\';';
			
			foreach ($akcje as $v)
			{
				if (strpos((string)$v,'insd'))
					$out_echo.= 'echo \'<div class="FormInsd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'insp'))
					$out_echo.= 'echo \'<div class="FormInsp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modd'))
					$out_echo.= 'echo \'<div class="FormModd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modp'))
					$out_echo.= 'echo \'<div class="FormModp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';	
			}
			
			$out_echo .= 'echo \'</div>\';';
			//$out_echo .= 'echo \'</fieldset>\';';
			$out_echo .= 'echo \'<fieldset class="FormFieldsetAkcji'.$szablon.'">\';';
			$out_echo .= 'echo \'<legend class="FormFieldAkcjiLegend'.$szablon.'">'.$this->_trans->translate('Akcje').'</legend>\';';
		
			$out_echo .= 'echo \'<div class="FormAkcje'.$szablon.'">\';';
		}
		else
		{
			$out_echo .= 'echo \'<hr class="FormHr'.$szablon.'">\';';
			$out_echo .= 'echo \'<div class="FormAkcje'.$szablon.'">\';';
	
			foreach ($akcje as $v)
			{
				if (strpos((string)$v,'insd'))
					$out_echo.= 'echo \'<div class="FormInsd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'insp'))
					$out_echo.= 'echo \'<div class="FormInsp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modd'))
					$out_echo.= 'echo \'<div class="FormModd'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';
				else if(strpos((string)$v,'modp'))
					$out_echo.= 'echo \'<div class="FormModp'.$szablon.'">'.$v->renderViewHelper().'</div></td>\';';	
			}

			$out_echo .= 'echo \'</fieldset>\';';
		}
		if ($this->default['typ_form_automat']!='I')
			$out_echo .= 'echo $this->form->anuluj_link(\''.$this->_trans->translate('Anuluj').'\');';	
			
		$out_echo .= 'echo $this->form->submit_link(\''.$this->_trans->translate('Zapisz').'\');';

		
		if ($this->default['oddzielny_fieldset_akcje'])
			$out_echo .= 'echo \'</fieldset>\';';
		
		$out_echo .= 'echo \'</div></td>\';';
		
		//if (!($this->default['oddzielny_fieldset_akcje']))
		//	$out_echo .= 'echo \'</fieldset>\';';
		
		if ($this->default['glowny fieldset'])
			$out_echo .= 'echo \'</fieldset>\';';
		
		$out_echo .= 'echo \'</form>\';';
		return $out_echo;		
	}
	
	//-------------------PRZYCISKI SPECJALNE---------------------------------------------------
	
	/*
	 * 	Funkcja do wstawiania specjalnego przycisku reset obsługiwanego przez JS dla np. gridów
	 */
	public function reset($option = array())
	{		
		$filtry = NULL;
		foreach ($option['filtry'] as $v)
		{
			if ($filtry==NULL)
				$filtry .= $v;
			else
				$filtry .= ','.$v;
		}
		$reset = new Zend_Form_Element_Button($this->_trans->translate('Wyczysc'));
		$reset->setAttrib('onclick','Czysc("'.$filtry.'","'.$option['formularz'].'")');
		$this->addElements(array($reset));
	}
	
	public function submit($option = array())
	{
		
		$szablon = $this->default['szablon'];
		
		$submit = new Zend_Form_Element_Submit($option['label']);
		
		if ($this->czy_grid)
	    	$submit->setAttrib('class','DataGridZapisz'.$szablon);
	    else		
	    	$submit->setAttrib('class','FormZapisz'.$szablon);
		
		$this->addElements(array($submit));
	}	
	
	/*
	 * 	Postać submita jako link
	 */	
	public function submit_link($p_label)
	{
		$szablon = $this->default['szablon'];
		
		if ($this->default['submit_akcja']!=NULL)
			$submit_akcja = 'document.location.href=\''.$this->default['submit_akcja'].'\';';
		else
			$submit_akcja = '';
		
		$out = '';
		$out = '<div class="FormZapiszDiv'.$szablon.'">';
		$out .= '<a href="javascript: return false;" class="FormZapiszLink'.$szablon.'" onclick="document.forms[\''.$this->default['nazwa_formularza'].'\'].submit();" >';
		$out .= $p_label;
		$out .= '</a>';
		$out .= '</div>';
		
		return $out;
		
	}	
	
	/*
	 * 	Postać anuluj jako link
	 */	
	public function anuluj_link($p_label)
	{
		$szablon = $this->default['szablon'];
		
		$out = '';
		$out = '<div class="FormAnulujDiv'.$szablon.'">';
		$out .= '<a href="'.$this->default['anuluj_akcja'].'" class="FormAnulujLink'.$szablon.'" >';
		$out .= $p_label;
		$out .= '</a>';
		$out .= '</div>';
		
		return $out;
	}	

	/**
	 *  Link w jako element forma z przyciskiem lub bez... sposob uzycia:
	 *  'linkurl'=>array('kolumna' =>  'NejmZendElementu',
				'czy_link'=>true,//obowiazkowy!!!
				'czy_przycisk'=>true, 
				'adres_url'=>'NazwaRoutera',
				'parametry_url'=>array('id'=>1,'page'=>123),//jak nie to pusty array
				'label' =>'Jakis label',),	
	 */	

	public function linkurl($p_option = array())
	{
		$szablon = $this->default['szablon'];
		$option = array(
										  'poz-x'			=> NULL,
										  'poz-y'			=> NULL,
										  'kolumna' 		=> NULL,
										  'wartosc' 		=> NULL,
										  'label'			=> NULL,
										  'tooltip' 		=> NULL,
										  'width'			=> 150,
										  'height'			=> 20,

										  'maper_id'		=> NULL,
		                                  'maper_label'     => NULL,
										  'jaki_null'		=> 'NULL',
										  'timestamp'		=> false,
										  'data'			=> false,
										  'special'			=> NULL,

										  'fieldset'		=> NULL,
		                                  'typ'             => NULL,

										  'numer_subforma' 	=> NULL,
										  'czy_link'		=>true,//param obowiazkowy!!
										  'czy_przycisk'	=>false,//czy element ma byc buttonem
										  'adres_url'		=>'',//adres routera
										  'nazwa' =>'',
										  'parametry_url' =>NULL,
																
					);
														
		$option=array_merge($option, $p_option);
		
		$link = new Zend_Form_Element_Text($option['kolumna']);
		
	   	if ($option['adres_url']!=NULL)//adres linka
	   		$link->setAttrib('adres_url', $option['adres_url']);
	   		
	   	if ($option['parametry_url']!=NULL)//array do routera
	   		$link->setAttrib('parametry_url', $option['parametry_url']);
	   	else	
	   		$link->setAttrib('parametry_url', array());
	   		
	   	if ($option['czy_przycisk']!=NULL)//robi button albo nie
	   		$link->setAttrib('czy_przycisk', $option['czy_przycisk']);	

	   	if ($option['czy_link']!=NULL)	//musi byc
			$link->setAttrib('czy_link',$option['czy_link']);	
			
		if ($option['label']!=NULL)	//musi byc
			$link->setLabel($option['label']);	

	   	if ($option['numer_subforma']!=NULL)//wiadomo
			$link->setAttrib('subform',$option['numer_subforma']);	
		else
			$link->setAttrib('subform',NULL);
		
/*		if ($this->czy_grid)
	    	$link->setAttrib('class','DataGridLink'.$szablon);
	    else		
	    	$link->setAttrib('class','FormLink'.$szablon);*/
		
		$this->addElements(array($link));
		
	}
	/**
	 * Zwraca link lub button ubrany w link
	 * @param ZEND_FORM_ELEMENT $p_v
	 * @return string do eval'a
	 */
	public function renderuj_link($p_v)
	{
		$czy_button = $p_v->getAttrib('czy_przycisk');
		$adres_url = $p_v->getAttrib('adres_url');
		$parametry_url = $p_v->getAttrib('parametry_url');
		$label = $p_v->getLabel();
		$arr_string='';
		foreach($parametry_url as $key => $value)
		{
			$arr_string .= $key.' =>'.$value.','; 
		}
		$out ='echo \'<div><a href="\';';
		$out .='echo $this->url(array('.$arr_string.'),\''.$adres_url.'\');';
		//$out .='echo $this->url(array(),\''.$adres_url.'\');';<<<DZAILA!!!!!!!	
		if($czy_button)
			$out .='echo \'"><button type="button">'.$label.'</button></a></div>\';';
		else
			$out.= 'echo \'">'.$label.'</a></div>\';';	
		return $out;
	}		
//------------------------------------Controler formularza-------------------------------------------------//
	public function Kontroler()
	{
		$kontroler ='
		
		$form->DodajParametry(array(  \'id\' => $this->_getParam(\'id\')));  	   	
		if ( $this->_request->isPost() )
    	{
    		$formData = $this->_request->getPost();
    		
    		if( $form->isValid( $formData ) )
			{   		
		    	foreach($maper as $m){
					//if ($this->default[\'typ_form_automat\']!=\'I\')
			    	//{	
						if ($this->default[\'typ_form_automat\']==\'E\')
							$maper->zUpdate( $this->_getParam(\'id\'), $formData );
						else if (\''.$this->default['typ_form_automat'].'\'==\'D\')
							$maper->zInsert($formData );	
			    		//$this->_redirect(\''.$this->default['anuluj_akcja'].'\');			    	
					//}
				}
				$this->_redirect(\''.$this->default['anuluj_akcja'].'\');
    		}
    		else
    		{
    			$this->view->msg = $form->getMessages();
    			$form->populate( $formData );
    		}
    	}
  	   	else
  	   	{ 	   	
  	   		if (\''.$this->default['typ_form'].'\'==\'E\')
  	   			$form->populate( $result );
  	   		
  	   	}
  	   	$this->view->form = $form;
  	   	';
  	   	
		return $kontroler;
	}	
	
//------------------------------------AUTOMATYCZNY FORMULARZ-----------------------------------------------//
	public function autoForm($p_maper)
	{
		$tabela = new $p_maper;
		
		//------------Instancja translatora-----------------//
		//$trans = Zend_Registry::get('Zend_Translate');
		
		$lista_kolumn = $tabela->fields_list;
		$lista_constr = $tabela->const_list;
		$pk			  = $tabela->PK;
		$insd		  =	$tabela->insd;
		$insp		  = $tabela->insp;
		$modd		  = $tabela->modd;
		$modp		  = $tabela->modp;
		
		$kolumny = $this->default['kolumny'];
		$width  = 100;
		$height = 20;
		
		//foreach ($lista_kolumn as $v => $atrybuty)
		foreach ($kolumny as $v => $s)
		{
			//$atrybuty_tab = $atrybuty;
			$atrybuty_tab = $lista_kolumn[$v];

		//-----------Przetwarzanie zwykłych kolumn----------//
			if (($v!=$pk)&&($v!=$insd)&&($v!=$insp)&&($v!=$modd)&&($v!=$modp)&&array_key_exists( $v, $kolumny ))
			{
				if (isset($atrybuty_tab[1]))
					$width = $atrybuty_tab[1]*4;
					
				if (($atrybuty_tab[0]=='VARCHAR'||$atrybuty_tab[0]=='NUMBER'||$atrybuty_tab[0]=='INT'||$atrybuty_tab[0]=='FLOAT')&&(strpos($v,'fk')==false)&&($atrybuty_tab[1]<=64))
				{
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2]
										)); 
					
					$this->input($atrybuty);
				}
				else if (($atrybuty_tab[0]=='TIMESTAMP')&&strpos($v,'fk')==false)
				{
					
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'timestamp'		=> true
										)); 
					
					$this->input($atrybuty);
				}
				else if (($atrybuty_tab[0]=='DATE')&&strpos($v,'fk')==false)
				{
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'data'			=> true
										)); 
					
					$this->input($atrybuty);

				}
				else if (($atrybuty_tab[0]=='TEXT'||$atrybuty_tab[0]=='MEDIUMTEXT')&&strpos($v,'fk')==false&&$atrybuty_tab[1]>64)
				{
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'czy_fckedytor' => true,
										'ToolbarSet'	=> 'CustomMenu'
										));
					
					$this->textarea($atrybuty);
				}
				else if (strpos($v,'fk'))
				{
					$kolumna = $kolumny[$v];
					$maper = new $this->default['maper_automat'];
					$maper_obcy_name = '';
					
					
					
					$table = $maper->const_list;
					for ($i = 0; $i < count($table); $i++) 
					{	
						
						$pos1 = stripos($table[$i], '_');
						if ($pos1!==false)
						{
							do 
							{			
								$przed = substr($table[$i],0,$pos1);
								$duza = substr($table[$i],$pos1+1,1);
								$po = substr($table[$i],$pos1+2);					
								
								$duza = strtoupper($duza);
								$table[$i] = $przed.$duza.$po;
								
								$field2 = $table[$i];
		
								$pos1 = stripos($table[$i], '_');
							}
							while ($pos1!==false);
						}
						$maper_obcy = new $field2;
						
						
						if (in_array($v,$maper_obcy->ref_list))
							$maper_obcy_name = $field2;
						$i++;
					}
					
					$kolumna = array_merge($kolumna, array('maper' => $maper_obcy_name,
														   'kolumna' 		=> $v,
														   'label'			=> $kolumna['label'],
														   'tooltip' 		=> $kolumna['label'],
														   'maper_id'		=> $kolumna['id'],
														   'maper_label'	=> $kolumna['wartosc'],
														   'jaki_null'		=> $atrybuty_tab[2]
															));
					
					if (isset($kolumna['where']))
						$kolumna = array_merge($kolumna, array('maper_where' => $kolumna['where']));
					if (isset($kolumna['from']))
						$kolumna = array_merge($kolumna, array('maper_from' => $kolumna['from']));
					if (isset($kolumna['order']))
						$kolumna = array_merge($kolumna, array('maper_order' => $kolumna['order']));
					if (isset($kolumna['group']))
						$kolumna = array_merge($kolumna, array('maper_group' => $kolumna['group']));
					
					$this->select($kolumna);
				}				
			}
			else if ($v==$insd)
			{
				$width = 120;
				
				$this->input(array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'label'			=> $kolumny[$v],
										'tooltip' 		=> $kolumny[$v],
										'jaki_null'		=> $atrybuty_tab[2],
										'data'			=> true,
										'special'		=> 'insd'
										));
			}
			
			
			/*
			//-----------Przetwarzanie zwykłych kolumn----------//
			if ($v!=$pk&&$v!=$insd&&$v!=$insp&&$v!=$modd&&$v!=$modp&&array_key_exists( $v, $kolumny ))
			{
				if (isset($atrybuty[1]))
					$width = $atrybuty[1]*4;
					
					//echo $atrybuty[2].'<br>';
					
				if (($atrybuty[0]=='VARCHAR'||$atrybuty[0]=='NUMBER'||$atrybuty[0]=='INT'||$atrybuty[0]=='FLOAT')&&strpos($v,'fk')==false&&$atrybuty[1]<=64)
				{
					//echo $atrybuty[2].'<br>';
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2]
										)); 
					
					$this->input($atrybuty);
				}
				else if (($atrybuty[0]=='TIMESTAMP')&&strpos($v,'fk')==false)
				{
					
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'timestamp'		=> true
										)); 
					
					$this->input($atrybuty);
				}
				else if (($atrybuty[0]=='DATE')&&strpos($v,'fk')==false)
				{
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'data'			=> true
										)); 
					
					$this->input($atrybuty);

				}
				else if (($atrybuty[0]=='TEXT'||$atrybuty[0]=='MEDIUMTEXT')&&strpos($v,'fk')==false&&$atrybuty[1]>64)
				{
					$atrybuty = $kolumny[$v];
					$atrybuty = array_merge($atrybuty,array(	
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'jaki_null'		=> $atrybuty_tab[2],
										'czy_fckedytor' => true,
										'ToolbarSet'	=> 'CustomMenu'
										));
					
					$this->textarea($atrybuty);
				}
				else if (strpos($v,'fk'))
				{
					$kolumna = $kolumny[$v];
					$maper = new $this->default['maper_automat'];
					$maper_obcy_name = '';
					
					
					
					$table = $maper->const_list;
					for ($i = 0; $i < count($table); $i++) 
					{	
						
						$pos1 = stripos($table[$i], '_');
						if ($pos1!==false)
						{
							do 
							{			
								$przed = substr($table[$i],0,$pos1);
								$duza = substr($table[$i],$pos1+1,1);
								$po = substr($table[$i],$pos1+2);					
								
								$duza = strtoupper($duza);
								$table[$i] = $przed.$duza.$po;
								
								$field2 = $table[$i];
		
								$pos1 = stripos($table[$i], '_');
							}
							while ($pos1!==false);
						}
						$maper_obcy = new $field2;
						
						
						if (in_array($v,$maper_obcy->ref_list))
							$maper_obcy_name = $field2;
						$i++;
					}
					
					$kolumna = array_merge($kolumna, array('maper' => $maper_obcy_name,
														   'kolumna' 		=> $v,
														   'label'			=> $kolumna['label'],
														   'tooltip' 		=> $kolumna['label'],
														   'maper_id'		=> $kolumna['id'],
														   'maper_label'	=> $kolumna['wartosc'],
														   'jaki_null'		=> $atrybuty_tab[2]
															));
					
					if (isset($kolumna['where']))
						$kolumna = array_merge($kolumna, array('maper_where' => $kolumna['where']));
					if (isset($kolumna['from']))
						$kolumna = array_merge($kolumna, array('maper_from' => $kolumna['from']));
					if (isset($kolumna['order']))
						$kolumna = array_merge($kolumna, array('maper_order' => $kolumna['order']));
					if (isset($kolumna['group']))
						$kolumna = array_merge($kolumna, array('maper_group' => $kolumna['group']));
					
					$this->select($kolumna);
				}				
			}
			else if ($v==$insd)
			{
				$width = 120;
				
				$this->input(array(	
										'height'		=> $height,
										'width'			=> $width,
										'kolumna' 		=> $v,
										'wartosc' 		=> NULL,
										'label'			=> $kolumny[$v],
										'tooltip' 		=> $kolumny[$v],
										'jaki_null'		=> $atrybuty_tab[2],
										'data'			=> true,
										'special'		=> 'insd'
										));
			}
			*/
		}

		//exit(0);
	}
	
	
	//Metoda do wstawiania specjalnch walidatorów
	public function walidator($p_co,$p_opt = array(),$p_messages = array())
	{
		
		//---Walidator sprawdzający wymagalnoć uzupełnienia---//
		if ($p_co=='NOT NULL')
		{
			$validator = new Zend_Validate_NotEmpty();      
         	$validator->setMessage($this->_trans->translate($p_messages['NOT NULL']),'isEmpty');
		}
		
		//---Walidator sprawdzający mieszczenie się w okreslonym zakresie---//
		if ($p_co=='STR LEN')
		{
			$messages = $p_messages['STR LEN'];
			$validator = new Zend_Validate_StringLength($p_opt);    
         	$validator->setMessage($this->_trans->translate($messages[0]),'stringLengthTooShort');
         	$validator->setMessage($this->_trans->translate($messages[1]),'stringLengthTooLong');
		}
		
		//---Walidator sprawdzający wyrażenie regularne---//
		if ($p_co=='REG EXP')
		{
			$messages = $p_messages['REG EXP'];
			$validator = new Zend_Validate_Regex($p_opt);    
         	$validator->setMessage($this->_trans->translate($messages[0]),'regexInvalid');
         	$validator->setMessage($this->_trans->translate($messages[1]),'regexNotMatch');
         	$validator->setMessage($this->_trans->translate($messages[2]),'regexErrorous');
		}
		
		//---Walidator sprawdzający wymagalnoć uzupełnienia dla checkbox'a---//
		if ($p_co=='GREATHER THAN')
		{
			$validator = new Zend_Validate_GreaterThan();      
         	$validator->setMessage($this->_trans->translate($p_messages['GREATHER THAN']),'notGreaterThan');
		}
		//@amazur: nowe validatory obsluga w mailu!!
		if ($p_co=='PESEL')
		{
			$validator = new  ValidatePESEL();     
		}
		
		if ($p_co=='NIP')
		{
			$validator = new  ValidateNIP();     
		}
		if ($p_co=='REGON')
		{
			$validator = new  ValidateREGON();     
		}
		
        return $validator;
	}
	
	public function przestaw_elementy_do_fieldsetow()
	{
		
	}
	
//---------------------------------------------------------------------------------------------------------//
}